/box-button-create {
  box-inline-create                % => Box
  dup box-button-setup-methods
  dup /box-button add-type
} def

/box-button-get-max-width {        % => Context Box
  box-container-get-max-width
} def

/box-button-get-min-width {        % => Context Box
  box-container-get-max-width
} def

/box-button-line-break-allowed {   % => Box
  pop false
} def

/box-button-reflow {
% Check if we need a line break here

  3 copy /maybe-line-break call-method
  pop

% Append to parent line box

  dup 2 index box-container-append-line

% Determine coordinates of upper-left corner

  2 copy
  box-generic-guess-corner       % => Context Parent This

% Determine the box width

  2 index 1 index
  /get-min-width call-method
  1 index put-full-width           % => Context Parent This

  2 index 1 index
  box-container-reflow-content     % => Context Parent This

% center the button text vertically inside the button

  dup get-content 0 get            % => Context Parent This Text
  dup get-top
  1 index get-height 2 div sub     % => Context Parent This Text TextMiddle
  2 index get-top
  3 index get-height 2 div sub     % => Context Parent This Text TextMiddle ThisMiddle
  sub

  neg 0                            % => Context Parent This Text -Delta 0
  2 index /offset call-method      % => Context Parent This Text
  pop                              % => Context Parent This

% Now set the baseline of a button box to align it vertically when flowing isude the  text line

  dup get-content 0 get
  get-default-baseline
  1 index get-extra-top add
  dup 2 index put-baseline
  1 index put-default-baseline

% Offset parent curernt X coordinate

  1 index get-current-x
  1 index get-full-width
  add
  2 index put-current-x

% Extend parent height

  dup get-bottom-margin
  1 index box-generic-extend-height
  
  pop pop pop
} def

/box-button-reflow-obsolete {               % => Context Parent This
% append to parent line box

  dup 2 index box-container-append-line

% Determine coordinates of upper-left _margin_ corner

  2 copy box-generic-guess-corner  % => Context Parent This

% Determine the box width

  2 index 1 index
  /get-min-width call-method
  1 index put-full-width           % => Context Parent This

  2 index 1 index
  box-container-reflow-content     % => Context Parent This

% Offset content to align vertically in the button
% Make the text centered vertically

  dup get-content 0 get            % => Context Parent This C0
  get-default-baseline 2 div       % => 
  1 index get-height 2 div add
  
  1 index get-content 0 get
  put-baseline

  2 index context-pop-collapsed-margin
  dup get-margin-bottom
  3 index context-push-collapsed-margin
                                   % => Context Parent This

  dup get-content 0 get
  get-baseline
  1 index get-extra-top add        % => Context Parent This DB
  1 index put-default-baseline     % => Context Parent This

% offset parent current X coordinate

  dup get-full-width
  2 index get-current-x add
  2 index put-current-x

% extends parents height

  dup get-bottom-margin
  2 index box-generic-extend-height

  pop pop pop
} def

/box-button-setup-methods {
  dup /Methods get
  dup /get-max-width {box-button-get-max-width} put
  dup /get-min-width {box-button-get-min-width} put
  dup /line-break-allowed {box-button-line-break-allowed} put
  dup /reflow {box-button-reflow} put
  dup /show  {box-button-show} put
  pop pop
} def

/box-button-show {             % => Viewport This
  box-container-show
} def
